# 导入后台任务类
from starlette.background import BackgroundTasks

# 导入异步 IO 模块
import asyncio


# 定义发送通知的异步函数
async def send_notification(email: str, message: str):
    # 模拟发送邮件（实际项目中替换为真实的邮件发送逻辑）
    print(f"正在发送邮件到 {email}: {message}")
    # 模拟网络延迟
    await asyncio.sleep(1)
    print(f"邮件发送完成: {email}")


# 定义创建用户的处理函数
async def create_user(request):
    # 解析请求数据
    data = await request.json()
    # 创建后台任务对象
    background = BackgroundTasks()
    # 添加后台任务
    background.add_task(send_notification, data["email"], "欢迎加入！")

    # 返回响应，包含后台任务
    from starlette.responses import JSONResponse

    return JSONResponse({"status": "用户创建成功"}, background=background)


# 定义主函数
def main():
    # 导入必要的模块
    from starlette.applications import Starlette
    from starlette.routing import Route
    from starlette.responses import PlainTextResponse, HTMLResponse
    from starlette.staticfiles import StaticFiles
    import uvicorn

    # 定义首页处理函数
    async def homepage(request):
        return HTMLResponse(
            """
        <!DOCTYPE html>
        <html>
        <head>
            <title>后台任务示例</title>
        </head>
        <body>
            <h1>后台任务示例</h1>
            <p><a href="/users">用户管理页面</a></p>
        </body>
        </html>
        """
        )

    # 定义用户页面处理函数
    async def users_page(request):
        with open("static/users.html", "r", encoding="utf-8") as f:
            html_content = f.read()
        return HTMLResponse(html_content)

    # 创建应用实例
    app = Starlette(
        routes=[
            Route("/", homepage),
            Route("/users", users_page),
            Route("/api/users", create_user, methods=["POST"]),
        ]
    )

    # 启动服务器
    uvicorn.run(app, host="127.0.0.1", port=8000)


# 脚本入口
if __name__ == "__main__":
    main()
